package binary_tree.Heap.leetcode;

import java.util.*;

/**
 * @Description: 返回前 k 个出现次数最多的单词
 * @Author Stark
 * @Date 2022/3/7 23:37
 **/
public class Num692_TopKFreqWords {
    public List<String> topKFrequent(String[] words, int k) {
        Map<String,Integer> map = new HashMap<>();
        //用Map对字符串去重
        for(String tmpStr: words){
            map.put(tmpStr,map.getOrDefault(tmpStr,0) + 1);
        }
        //将字符串全部保存进List集合中
        List<String> list = new ArrayList<>();
        for (Map.Entry<String,Integer> tmpMap : map.entrySet()){
            list.add(tmpMap.getKey());
        }
        //进行出现的频率比较,相同的时候比较字典序,不同的时候按照降序排
        Collections.sort(list, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return map.get(o1) == map.get(o2) ? o1.compareTo(o2) : map.get(o2) - map.get(o1);
            }
        });
        //最后返回前k个较大的
        return list.subList(0,k);
    }
}
